module events

import webview
import dialog

// 绑定事件
pub fn bind(w &webview.Webview){

	// 系统提示框
	w.bind("systemAlert",fn (e &webview.Event) bool {
		// 提取并校验参数
		message := e.get_arg[string](0) or { return false }
		// 带默认值的枚举映射函数
		map_button := fn (code int) dialog.MessageButtons {
			return match code {
				0 { .ok }
				1 { .ok_cancel }
				else { .yes_no } // 包含意外值处理
			}
		}
		map_level := fn (code int) dialog.MessageLevel {
			return match code {
				0 { .info }
				1 { .warning }
				else { .error } // 包含意外值处理
			}
		}
		// 创建配置对象(默认值已在映射函数处理)
		options := dialog.MessageOptions{
			buttons: map_button(e.get_arg[int](1) or { 0 })
			level:   map_level(e.get_arg[int](2) or { 0 })
		}
		return dialog.message(message, options)
	})

	// 系统prompt框
	w.bind("systemPrompt",fn (e &webview.Event) string {
		// 参数1：提示内容
		msg := e.get_arg[string](0) or { "" }
		// 参数2：默认值,默认空
		map_level := fn (code int) dialog.MessageLevel {
			return match code {
				0 { .info }
				1 { .warning }
				else { .error } // 包含意外值处理
			}
		}
		return dialog.prompt(msg, level:map_level(e.get_arg[int](2) or { 0 })) or { "" }
	})

	// 打开文件选择对话框,返回文件路径
	w.bind("dialogFile",fn (e &webview.Event) string {
		f := dialog.file_dialog() or { "" }
		return f.str()
	})

	// 打开文件夹选择对话框,返回文件夹路径
	w.bind("dialogDir",fn (e &webview.Event) string {
		opt := dialog.FileOpenOptions{}
		p, _ := dialog.open_dir(opt) or { return '' }
		return p
	})

	// 打开保存文件对话框,返回 bool
	w.bind("dialogSave",fn (e &webview.Event) bool {
		content := e.get_arg[string](0) or { "" }
		filename := e.get_arg[string](1) or { "" }
		dialog.save_file(content, filename:filename) or { return false }
		return true
	})
}